home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / slip / sl.shar / sl / if_sl.c.diff next >
Text File  |  1988-04-12  |  7KB  |  312 lines

  1. *** net/if_sl.c.orig    Thu Apr  7 16:45:26 1988
  2. --- net/if_sl.c    Thu Apr  7 16:48:20 1988
  3. ***************
  4. *** 38,64 ****
  5.   #include "sl.h"
  6.   #if NSL > 0
  7.   
  8. ! #include "param.h"
  9. ! #include "mbuf.h"
  10. ! #include "buf.h"
  11. ! #include "dk.h"
  12. ! #include "socket.h"
  13. ! #include "ioctl.h"
  14. ! #include "file.h"
  15. ! #include "tty.h"
  16. ! #include "errno.h"
  17.   
  18. ! #include "if.h"
  19. ! #include "netisr.h"
  20. ! #include "route.h"
  21.   #if INET
  22.   #include "../netinet/in.h"
  23.   #include "../netinet/in_systm.h"
  24. ! #include "../netinet/in_var.h"
  25.   #include "../netinet/ip.h"
  26.   #endif
  27.   
  28.   #include "../machine/mtpr.h"
  29.   
  30.   /*
  31.    * N.B.: SLMTU is now a hard limit on input packet size.
  32. --- 38,66 ----
  33.   #include "sl.h"
  34.   #if NSL > 0
  35.   
  36. ! #include "../h/param.h"
  37. ! #include "../h/mbuf.h"
  38. ! #include "../h/buf.h"
  39. ! #include "../h/dk.h"
  40. ! #include "../h/socket.h"
  41. ! #include "../h/ioctl.h"
  42. ! #include "../h/file.h"
  43. ! #include "../h/tty.h"
  44. ! #include "../h/errno.h"
  45.   
  46. ! #include "../net/if.h"
  47. ! #include "../net/netisr.h"
  48. ! #include "../net/route.h"
  49.   #if INET
  50.   #include "../netinet/in.h"
  51.   #include "../netinet/in_systm.h"
  52. ! /* #include "../netinet/in_var.h" */
  53.   #include "../netinet/ip.h"
  54.   #endif
  55.   
  56. + #ifndef sun
  57.   #include "../machine/mtpr.h"
  58. + #endif
  59.   
  60.   /*
  61.    * N.B.: SLMTU is now a hard limit on input packet size.
  62. ***************
  63. *** 85,95 ****
  64. --- 87,142 ----
  65.   #define TRANS_FRAME_END         0334        /* transposed frame end */
  66.   #define TRANS_FRAME_ESCAPE     0335        /* transposed frame esc */
  67.   
  68. + #ifdef sun
  69. + #define t_sc t_linep
  70. + extern    char    mclrefcnt[];
  71. + #else
  72.   #define t_sc T_LINEP
  73. + #endif
  74.   
  75.   int sloutput(), slioctl(), ttrstrt();
  76.   
  77. + #ifndef mtocl
  78. + /* virtual address to network cluster number */
  79. + #define    mtocl(x) (((int)x - (int)mbutl) >> CLSHIFT)
  80. + #endif
  81.   /*
  82. +  * Mbuf page cluster macros.
  83. +  * MCLALLOC allocates mbuf page clusters.
  84. +  * Note that it works only with a count of 1 at the moment.
  85. +  * MCLGET adds such clusters to a normal mbuf.
  86. +  * m->m_len is set to CLBYTES upon success.
  87. +  * MCLFREE frees clusters allocated by MCLALLOC.
  88. +  */
  89. + #ifndef MCLALLOC
  90. + #define    MCLALLOC(m, i) \
  91. +     { int ms = splimp(); \
  92. +       if (mclfree == 0) \
  93. +         (void)m_clalloc(1, MPG_CLUSTERS, M_DONTWAIT); \
  94. +       if ((m)=mclfree) \
  95. +          {++mclrefcnt[mtocl(m)];mbstat.m_clfree--;mclfree = (m)->m_next;} \
  96. +       splx(ms); }
  97. + #endif
  98. + #ifndef MCLGET
  99. + #define    MCLGET(m) \
  100. +     { struct mbuf *p; \
  101. +       MCLALLOC(p, 1); \
  102. +       if (p) { \
  103. +         (m)->m_off = (int)p - (int)(m); \
  104. +         (m)->m_len = CLBYTES; \
  105. +       } \
  106. +     }
  107. + #endif
  108. + #ifndef MCLFREE
  109. + #define    MCLFREE(m) { \
  110. +     if (--mclrefcnt[mtocl(m)] == 0) \
  111. +         { (m)->m_next = mclfree;mclfree = (m);mbstat.m_clfree++;} \
  112. +     }
  113. + #endif
  114. + /*
  115.    * Called from boot code to establish sl interfaces.
  116.    */
  117.   slattach()
  118. ***************
  119. *** 121,126 ****
  120. --- 168,186 ----
  121.       register struct sl_softc *sc;
  122.       register int nsl;
  123.   
  124. + #ifndef BSD4_3
  125. +     if (sl_softc->sc_if.if_name == NULL) {
  126. +         slattach();        /* XXX */
  127. +         if (ifnet != NULL && !bcmp(ifnet->if_name, "lo", sizeof "lo")) {
  128. +             register struct ifnet *ifp;
  129. +             ifp = ifnet->if_next;
  130. +             ifnet->if_next = NULL;
  131. +             ifnet = ifp;
  132. +             loattach();    /* XXX */
  133. +         }
  134. +     }
  135. + #endif
  136.       if (!suser())
  137.           return (EPERM);
  138.       if (tp->t_line == SLIPDISC)
  139. ***************
  140. *** 388,395 ****
  141. --- 448,457 ----
  142.               m_freem(top);
  143.               return (NULL);
  144.           }
  145. + #ifdef BSD4_3
  146.           if (ifp)
  147.               m->m_off += sizeof(ifp);
  148. + #endif
  149.           /*
  150.            * If we have at least NBPG bytes,
  151.            * allocate a new page.  Swap the current buffer page
  152. ***************
  153. *** 398,424 ****
  154. --- 460,495 ----
  155.            * for the interface pointer.
  156.            */
  157.           if (len >= NBPG) {
  158. + #if defined(BSD4_3) || defined(sun)
  159.               MCLGET(m);
  160. + #else
  161. +             MCLGET(m, 0);
  162. + #endif
  163.               if (m->m_len == CLBYTES) {
  164.                   cp = mtod(m, char *);
  165.                   m->m_off = (int)sc->sc_buf - (int)m;
  166.                   sc->sc_buf = cp;
  167. + #ifdef BSD4_3
  168.                   if (ifp) {
  169.                       m->m_off += sizeof(ifp);
  170.                       count = MIN(len,
  171.                           CLBYTES - sizeof(struct ifnet *));
  172.                   } else
  173. + #endif
  174.                       count = MIN(len, CLBYTES);
  175.                   goto nocopy;
  176.               }
  177.           }
  178. + #ifdef BSD4_3
  179.           if (ifp)
  180.               count = MIN(len, MLEN - sizeof(ifp));
  181.           else
  182. + #endif
  183.               count = MIN(len, MLEN);
  184.           bcopy(cp, mtod(m, caddr_t), count);
  185.   nocopy:
  186.           m->m_len = count;
  187. + #ifdef BSD4_3
  188.           if (ifp) {
  189.               m->m_off -= sizeof(ifp);
  190.               m->m_len += sizeof(ifp);
  191. ***************
  192. *** 425,430 ****
  193. --- 496,502 ----
  194.               *mtod(m, struct ifnet **) = ifp;
  195.               ifp = NULL;
  196.           }
  197. + #endif
  198.           cp += count;
  199.           len -= count;
  200.           mp = &m->m_next;
  201. ***************
  202. *** 515,535 ****
  203. --- 587,669 ----
  204.       int cmd;
  205.       caddr_t data;
  206.   {
  207. + #ifdef BSD4_3
  208.       register struct ifaddr *ifa = (struct ifaddr *)data;
  209. + #else
  210. + #ifdef sun
  211. +     register struct sockaddr *addr = (struct sockaddr *)data;
  212. + #else
  213. +     register struct ifreq *ifr = (struct ifreq *)data;
  214. +     register struct sockaddr *addr;
  215. + #endif
  216. + #endif
  217.       int s = splimp(), error = 0;
  218.   
  219.       switch (cmd) {
  220.   
  221.       case SIOCSIFADDR:
  222. + #ifdef BSD4_3
  223.           if (ifa->ifa_addr.sa_family == AF_INET)
  224.               ifp->if_flags |= IFF_UP;
  225. + #else
  226. + #ifndef sun
  227. +         addr = &ifr->ifr_addr;
  228. + #endif
  229. +         if (addr->sa_family == AF_INET) {
  230. +             struct sockaddr oldaddr;
  231. +             struct sockaddr_in netaddr;
  232. +             int s = splimp();
  233. +         
  234. +             oldaddr = ifp->if_addr;
  235. +             ifp->if_addr = *addr;
  236. +         
  237. +             /*
  238. +              * Delete any previous route for an old address.
  239. +              */
  240. +             bzero((caddr_t)&netaddr, sizeof (netaddr));
  241. +             netaddr.sin_family = AF_INET;
  242. +             if (ifp->if_flags & IFF_ROUTE) {
  243. +                 rtinit(&ifp->if_dstaddr, &oldaddr, RTF_HOST);
  244. +                 ifp->if_flags &= ~IFF_ROUTE;
  245. +             }
  246. +             ifp->if_net = in_netof(((struct sockaddr_in *)(addr))->sin_addr);
  247. +             splx(s);
  248. +             /*
  249. +              * Add route for the network.
  250. +              */
  251. +             if (ifp->if_flags & IFF_POINTOPOINT)
  252. +                 rtinit(&ifp->if_dstaddr, &ifp->if_addr,
  253. +                     RTF_HOST|RTF_UP);
  254. +             ifp->if_flags |= IFF_ROUTE | IFF_UP;
  255. +         }
  256. + #endif
  257.           else
  258.               error = EAFNOSUPPORT;
  259.           break;
  260.   
  261.       case SIOCSIFDSTADDR:
  262. + #ifdef BSD4_3
  263.           if (ifa->ifa_addr.sa_family != AF_INET)
  264. + #else
  265. + #ifndef sun
  266. +         addr = &ifr->ifr_addr;
  267. + #endif
  268. +         if (addr->sa_family != AF_INET)
  269. + #endif
  270.               error = EAFNOSUPPORT;
  271. + #ifndef BSD4_3
  272. +         else {
  273. +             struct sockaddr oldaddr;
  274. +             oldaddr = ifp->if_dstaddr;
  275. +             ifp->if_dstaddr = *addr;
  276. +             if (ifp->if_flags & IFF_ROUTE) {
  277. +                 rtinit(&oldaddr, &ifp->if_addr, -1);
  278. +                 rtinit(&ifp->if_dstaddr, &ifp->if_addr,
  279. +                     RTF_HOST|RTF_UP);
  280. +             }
  281. +         }
  282. + #endif
  283.           break;
  284.   
  285.       default:
  286. ***************
  287. *** 538,541 ****
  288. --- 672,689 ----
  289.       splx(s);
  290.       return (error);
  291.   }
  292. + #ifndef BSD4_3
  293. + locc(mask, size, cp)
  294. +     register u_char mask;
  295. +     u_int size;
  296. +     register u_char *cp;
  297. + {
  298. +     register u_char *end = &cp[size];
  299. +     while (cp < end && *cp != mask)
  300. +         cp++;
  301. +     return (end - cp);
  302. + }
  303. + #endif
  304.   #endif
  305.